import request from 'wechat-http'
import { USER_INFO } from '../store/store'
import { getPage, urlEncode } from './utils'

// 设置请求基地址
request.baseURL = 'https://smart-shop.itheima.net/index.php?s=/api'

// 配置请求拦截器
request.intercept.request = (config) => {
  // 获取本地存储的 token
  const { token } = wx.getStorageSync(USER_INFO) || {}
  if (token) {
    // 🔴 注意：小程序是 header 没有 s ，而 axios 是 headers
    // 小程序的 header 默认为 undefined，需进行初始化，否则报错
    config.header = {
      // 为请求头对象添加 token 验证的 Authorization 字段
      'Access-Token': token,
      platform: 'MP-WEIXIN',
      // 保留原有的 header
      ...config.header,
    }
  }
  // 返回请求配置对象
  return config
}

// 设置响应拦截器
request.intercept.response = (response) => {
  // 获取后端返回的数据
  const res = response.data || {}
  // 判断后端业务状态码是否正确
  if (res.status >= 200 && res.status < 300) {
    // 返回核心数据
    return res
  }
  // 如果业务状态码为 401，则跳转到登录页
  else if (res.status === 401) {
    // 获取当前页面实例
    const page = getPage()
    // 将当前页面的 路由 + 参数 传递给登录页
    const query = urlEncode({
      redirectURL: '/' + page.route,
      ...page.options,
    })
    // 401 未授权，跳转到登录页，并将当前页面的路由传递给登录页
    wx.redirectTo({
      url: `/pages/login/login?${query}`,
    })
  }
  // 返回一个失败的 Promise 对象, 中断 await 后续代码的执行
  return Promise.reject(res.message)
}

// 默认导出
export default request
